package guhong.play.commandsystem.job.tool.ai;

import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import guhong.play.commandsystem.util.file.FileOperationUtil;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.List;

/**
 * @author : 李双凯
 * @date : 2019-11-20 22:32
 **/
@Data
public class AiConfig {

    private String mode;

    private Double topP;

    private List<AiPrompt> promptList = CollectionUtil.newArrayList();

    private AiPrompt currentPrompt = null;

    public static AiConfig buildDefaultConfig() {
        AiConfig aiConfig = new AiConfig();
        aiConfig.mode = "qwen-max";
        aiConfig.topP = 0.7;
        aiConfig.promptList.add(new AiPrompt("翻译", "你是一个专业的翻译专家，如果我提供的是中文，你需要翻译成合适的英文，除非我说明了特定的语言。" +
                "如果我提供的是非中文，你需要翻译成合适的中文。" +
                "你不需要举例、解释或提供任何额外的信息，也不需要回答任何问题。"));

        aiConfig.promptList.add(new AiPrompt("命名",
                "你是一个编程命名助手," +
                "你的任务是：不管我提供的什么中文词汇，你都需要转换为遵循编程规范、合法、易读的编程变量名。" +
                "变量名必须使用驼峰命名法。" +
                "如果我给出的是名词，那你需要给出相应名词的变量名" +
                "如果我给出的是动词+名词，那你需要给出动词+名词的组合单词" +
                "列出1~5个你认为最好的答案并给出相应的解释，同时确保输出的变量名不包含任何保留字。" +
                "你不需要举例、不需要与我对话、不需要回答任何问题、不需要输出和这个任务无关的文字，除非我让你这么做。" +
                "如果你明白了，不需要做任何回复"));
        return aiConfig;
    }

    public void sync() {
        System.out.println(JSONObject.toJSONString(this));
        FileOperationUtil.coverConfig(AiCommandManager.CONFIG_FILE_PATH, JSONObject.toJSONString(this));
    }


    @Data
    @AllArgsConstructor
    public static class AiPrompt {

        private String name;

        private String prompt;
    }
}
